package system

import "time"

type SysMenu struct {
	Id         uint64    `json:"id" gorm:"column:id;primaryKey"` //表示主键
	ParentId   uint64    `json:"parentId" gorm:"parent_id"`
	TreePath   string    `json:"treePath" gorm:"tree_path"`
	Name       string    `json:"name" gorm:"name"`
	Type       uint8     `json:"type" gorm:"type"`
	RouteName  string    `json:"routeName" gorm:"route_name"`
	RoutePath  string    `json:"routePath" gorm:"route_path"`
	Component  string    `json:"component" gorm:"component"`
	Perm       string    `json:"perm" gorm:"perm"`
	AlwaysShow uint8     `json:"alwaysShow" gorm:"always_show"`
	KeepAlive  uint8     `json:"keepAlive" gorm:"keep_alive"`
	Visible    uint8     `json:"visible" gorm:"visible"`
	Sort       int       `json:"sort" gorm:"sort"`
	Icon       string    `json:"icon" gorm:"icon"`
	Redirect   string    `json:"redirect" gorm:"redirect"`
	CreateTime time.Time `json:"createTime" gorm:"column:create_time;type:datetime;autoCreateTime"`
	UpdateTime time.Time `json:"updateTime" gorm:"column:update_time;type:datetime;autoCreateTime"`
	Params     string    `json:"params" gorm:"params"`
}

func (SysMenu) TableName() string {
	return "sys_menu"
}

type RouteVO struct {
	Path      *string    `json:"path"`               //路由路径
	Component *string    `json:"component"`          //组件路径
	Redirect  *string    `json:"redirect"`           //跳转链接
	Name      *string    `json:"name"`               //路由名称
	Meta      *Meta      `json:"meta"`               //路由属性
	Children  []*RouteVO `json:"children,omitempty"` //子路由列表
}

type Meta struct {
	Title      *string     `json:"title"`      //路由title
	Icon       *string     `json:"icon"`       //ICON
	Hidden     *bool       `json:"hidden"`     //是否隐藏(true-是 false-否)
	KeepAlive  *bool       `json:"keepAlive"`  //【菜单】是否开启页面缓存
	AlwaysShow *bool       `json:"alwaysShow"` //目录】只有一个子路由是否始终显示
	Params     []*KeyValue `json:"params"`     //路由参数
}

type RouteBO struct {
	Id         *uint64 `json:"id"`
	ParentId   *uint64 `json:"parentId"`
	Name       *string `json:"name"`
	MenuType   *uint8  `json:"type"`       // menuType 1 菜单 2目录 3 外链 4 按钮
	RouteName  *string `json:"routeName"`  //路由名称（Vue Router 中定义的路由名称）
	RoutePath  *string `json:"routePath"`  //路由路径（Vue Router 中定义的 URL 路径）
	Component  *string `json:"component"`  //组件路径(vue页面完整路径，省略.vue后缀)
	Rerm       *string `json:"perm"`       //权限标识
	Visible    *uint8  `json:"visible"`    //显示状态(1:显示;0:隐藏)
	Sort       *uint32 `json:"sort"`       //排序
	Icon       *string `json:"icon"`       //菜单图标
	Redirect   *string `json:"redirect"`   //跳转路径
	AlwaysShow *uint8  `json:"alwaysShow"` //【目录】只有一个子路由是否始终显示(1:是 0:否)
	KeepAlive  *uint8  `json:"keepAlive"`  //【菜单】是否开启页面缓存(1:是 0:否)
	Params     *string `json:"params"`     //【菜单】路由参数
}

type MenuQuery struct {
	Keywords string `json:"keywords" form:"keywords"` //关键字(菜单名称)
	Status   int8   `json:"status" form:"status"`     //状态(1->显示；0->隐藏)
}

type MenuVO struct {
	Id        uint64   `json:"id"`
	ParentId  uint64   `json:"parentId"`
	Name      string   `json:"name"`
	MenuType  string   `json:"type"`      // menuType 1 菜单 2目录 3 外链 4 按钮
	RouteName string   `json:"routeName"` //路由名称（Vue Router 中定义的路由名称）
	RoutePath string   `json:"routePath"` //路由路径（Vue Router 中定义的 URL 路径）
	Component string   `json:"component"` //组件路径(vue页面完整路径，省略.vue后缀)
	Sort      int      `json:"sort"`      //排序
	Visible   uint8    `json:"visible"`   //显示状态(1:显示;0:隐藏)
	Icon      string   `json:"icon"`      //菜单图标
	Redirect  string   `json:"redirect"`  //跳转路径
	Perm      string   `json:"perm"`      //权限标识
	Children  []MenuVO `json:"children"`
}

type MenuForm struct {
	Id         uint64     `json:"id" gorm:"column:id;primaryKey"` //表示主键
	ParentId   uint64     `json:"parentId" gorm:"parent_id"`
	Name       string     `json:"name" gorm:"name"`
	Type       string     `json:"type" gorm:"type"`
	RouteName  string     `json:"routeName" gorm:"route_name"`
	RoutePath  string     `json:"routePath" gorm:"route_path"`
	Component  string     `json:"component" gorm:"component"`
	Perm       string     `json:"perm" gorm:"perm"`
	Visible    uint8      `json:"visible" gorm:"visible"`
	Sort       int        `json:"sort" gorm:"sort"`
	Icon       string     `json:"icon" gorm:"icon"`
	Redirect   string     `json:"redirect" gorm:"redirect"`
	KeepAlive  uint8      `json:"keepAlive" gorm:"keep_alive"`
	AlwaysShow uint8      `json:"alwaysShow" gorm:"always_show"`
	Params     []KeyValue `json:"params" gorm:"params"` //路由参数
}
type KeyValue struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

// 菜单精简信息
type MenuSimpleRespVO struct {
	Id       uint64 `json:"id" gorm:"column:id;primaryKey"` //表示主键
	Name     string `json:"name" gorm:"name"`
	ParentId uint64 `json:"parentId" gorm:"parent_id"`
	Type     string `json:"type" gorm:"type"`
}
